﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Reflection;
using Telerik.Windows.Controls;
using Biciq.Datos;

namespace Biciq.Silverlight.UI
{
    public partial class PrincipalVista : UserControl
    {
        public PrincipalVista()
        {
            InitializeComponent();
        }

        private void RadMenu_ItemClick(object sender, Telerik.Windows.RadRoutedEventArgs e)
        {
            var vm = (PrincipalVistaModelo)DataContext;
            var menuSeleccionado = ((Arbol)(((RadMenuItem)e.OriginalSource).DataContext));
            var recurso = vm.UsuarioLogueado.Rol.Accesoes.Where(m => m.Recurso.id == menuSeleccionado.Id).First();

            vm.PathActual = "Ubicación actual: " + ObtenerPathActual(recurso, "");
            RenderControl(menuSeleccionado.Pagina);
        }
        private string ObtenerPathActual(Acceso menuSeleccionado, string resultado)
        {
            if (menuSeleccionado.Recurso.idPadre == "0")
            {
                if (resultado == "")
                    return menuSeleccionado.Recurso.descripcion;
                else
                    return resultado;
            }

            var padre = ((PrincipalVistaModelo)DataContext).UsuarioLogueado.Rol.Accesoes.Where(m => m.Recurso.id == menuSeleccionado.Recurso.idPadre).FirstOrDefault();
            resultado = ObtenerPathActual(padre, resultado) + " → " + menuSeleccionado.Recurso.descripcion;

            return resultado;
        }

        /// <summary>
        ///  Metodo que dibuja los controles de usuario en el contenedro canvas.
        /// </summary>
        /// <param name="currentControl"></param>
        public void RenderControl(string currentControl)
        {

            Type type = this.GetType();

            Assembly assembly = type.Assembly;
            try
            {
                UserControl newPage = (UserControl)assembly.CreateInstance(type.Namespace + "." + currentControl);
                string nombreTipo = type.Namespace + "." + currentControl + "Modelo";

                Object context = Activator.CreateInstance(assembly.GetType(nombreTipo));

                newPage.DataContext = context;
                canvasBody.Content = null;
                canvasBody.Content = newPage;
            }
            catch (Exception ex)
            {

            }

        }


        #region Métodos Públicos
        public void LimpiarCanvas()
        {
            canvasBody.Content = null;
        }
        #endregion
    }
}
